package HighConcurrency.Lock;

public class VolatileDemo {
    public static void main(String[] args) {
        Data1 d=new Data1();
        d.i=20;
        new Thread(new Runnable() {//线程A
            @Override
            public void run() {
                System.out.println("线程A开始");
                while (d.i==20) {}
                System.out.println("线程A结束");
            }
        }).start();

        new Thread(new Runnable() {//线程B
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                    System.out.println("线程B开始");
                    d.i=10;
                    System.out.println("线程B结束");
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }

            }
        }).start();
    }
}
class Data1{
    volatile int i;//添加volatile关键字
    //保证线程的可见性，当此变量被修改时，其他线程能够立即得知
    // 不保证原子性，线程不安全。
    //原子性：当一个操作同时被多个线程执行时，该操作是线程安全的。
}
